package com.github.cakin.shiro.chapter12.service;

import com.github.cakin.shiro.chapter12.dao.UserDao;
import com.github.cakin.shiro.chapter12.entity.User;

import java.util.Set;

/**
 * @className: UserServiceImpl
 * @description: 用户服务实现类
 * @date: 2020/5/19
 * @author: cakin
 */
public class UserServiceImpl implements UserService {
    /**
     * 创建一个用户Dao
     */
    private UserDao userDao;
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    /**
     * 创建一个密码工具
     */
    private PasswordHelper passwordHelper;
    public void setPasswordHelper(PasswordHelper passwordHelper) {
        this.passwordHelper = passwordHelper;
    }
    /**
     * 功能描述：创建用户
     *
     * @param user 用户
     * @return User 用户
     * @author cakin
     * @date 2020/5/19
     */
    public User createUser( User user ) {
        //加密密码
        passwordHelper.encryptPassword(user);
        return userDao.createUser(user);
    }

    /**
     * 功能描述：修改密码
     *
     * @param userId      用户id
     * @param newPassword 新密码
     * @author cakin
     * @date 2020/5/19
     */
    public void changePassword( Long userId, String newPassword ) {
        User user = userDao.findOne(userId);
        user.setPassword(newPassword);
        passwordHelper.encryptPassword(user);
        userDao.updateUser(user);
    }

    /**
     * 功能描述：添加用户-角色关系
     *
     * @param userId 用户id
     * @param roleIds 角色列表
     * @author cakin
     * @date 2020/5/19
     */
    public void correlationRoles( Long userId, Long... roleIds ) {
        userDao.correlationRoles(userId, roleIds);
    }


    /**
     * 功能描述：移除用户-角色关系
     *
     * @param userId 用户id
     * @param roleIds 角色id列表
     * @author cakin
     * @date 2020/5/19
     */
    public void uncorrelationRoles( Long userId, Long... roleIds ) {
        userDao.uncorrelationRoles(userId, roleIds);
    }

    /**
     * 功能描述：根据用户名查找用户
     *
     * @param username 用户名
     * @return User 用户
     * @author cakin
     * @date 2020/5/19
     */
    public User findByUsername( String username ) {
        return userDao.findByUsername(username);
    }

    /**
     * 功能描述：根据用户名查找其角色
     *
     * @param username 用户名
     * @return Set<String> 介绍集合
     * @author cakin
     * @date 2020/5/19
     */
    public Set<String> findRoles( String username ) {
        return userDao.findRoles(username);
    }

    /**
     * 功能描述：根据用户名查找其权限
     *
     * @param username 用户名
     * @return Set<String> 权限集合
     * @author cakin
     * @date 2020/5/19
     */
    public Set<String> findPermissions( String username ) {
        return userDao.findPermissions(username);
    }

}
